
srcdir = @srcdir@

CC = @CC@
CFLAGS = @CFLAGS@
CPPFLAGS = @CPPFLAGS@
LDFLAGS = @LDFLAGS@
LIBS = @LIBS@
RKTLINKER = @RKTLINKER@

STATIC_AR = @STATIC_AR@
ARFLAGS = @ARFLAGS@
RANLIB = @RANLIB@

# Used only for standalone builds:
AR = @AR@
ICP_LIB = @ICP_LIB@
prefix = @prefix@
exec_prefix = @exec_prefix@
libdir = @libdir@

RACKET = racket

RKTIO_HEADERS = $(srcdir)/rktio.h $(srcdir)/rktio_private.h $(srcdir)/rktio_platform.h rktio_config.h

OBJS = rktio_fs.@LTO@ \
       rktio_fd.@LTO@ \
       rktio_file.@LTO@ \
       rktio_poll_set.@LTO@ \
       rktio_ltps.@LTO@ \
       rktio_sleep.@LTO@ \
       rktio_network.@LTO@ \
       rktio_pipe.@LTO@ \
       rktio_process.@LTO@ \
       rktio_signal.@LTO@ \
       rktio_envvars.@LTO@ \
       rktio_fs_change.@LTO@ \
       rktio_flock.@LTO@ \
       rktio_shellex.@LTO@ \
       rktio_time.@LTO@ \
       rktio_cpu.@LTO@ \
       rktio_syslog.@LTO@ \
       rktio_convert.@LTO@ \
       rktio_sha1.@LTO@ \
       rktio_sha2.@LTO@ \
       rktio_dll.@LTO@ \
       rktio_error.@LTO@ \
       rktio_hash.@LTO@ \
       rktio_wide.@LTO@ \
       rktio_console.@LTO@ \
       rktio_main.@LTO@

default_rktio:
	$(MAKE) @HIDE_STANDALONE@@HIDE_NOT_STANDALONE@librktio

@HIDE_STANDALONE@librktio:
	$(MAKE) librktio.@LTA@

@HIDE_NOT_STANDALONE@librktio.@LTA@: $(OBJS)
	$(STATIC_AR) $(ARFLAGS) @HIDE_NOT_STANDALONE@librktio.@LTA@ $(OBJS)

demo: rktio_demo
	./rktio_demo $(ARGS)

rktio_demo: librktio.@LTA@ demo.@LTO@
	$(RKTLINKER) -o rktio_demo $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) demo.@LTO@ librktio.@LTA@ $(LIBS)

rktio_fs.@LTO@: $(srcdir)/rktio_fs.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_fs.@LTO@ -c $(srcdir)/rktio_fs.c

rktio_fd.@LTO@: $(srcdir)/rktio_fd.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_fd.@LTO@ -c $(srcdir)/rktio_fd.c

rktio_file.@LTO@: $(srcdir)/rktio_file.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_file.@LTO@ -c $(srcdir)/rktio_file.c

rktio_poll_set.@LTO@: $(srcdir)/rktio_poll_set.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_poll_set.@LTO@ -c $(srcdir)/rktio_poll_set.c

rktio_ltps.@LTO@: $(srcdir)/rktio_ltps.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_ltps.@LTO@ -c $(srcdir)/rktio_ltps.c

rktio_sleep.@LTO@: $(srcdir)/rktio_sleep.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_sleep.@LTO@ -c $(srcdir)/rktio_sleep.c

rktio_network.@LTO@: $(srcdir)/rktio_network.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_network.@LTO@ -c $(srcdir)/rktio_network.c

rktio_pipe.@LTO@: $(srcdir)/rktio_pipe.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_pipe.@LTO@ -c $(srcdir)/rktio_pipe.c

rktio_process.@LTO@: $(srcdir)/rktio_process.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_process.@LTO@ -c $(srcdir)/rktio_process.c

rktio_signal.@LTO@: $(srcdir)/rktio_signal.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_signal.@LTO@ -c $(srcdir)/rktio_signal.c

rktio_envvars.@LTO@: $(srcdir)/rktio_envvars.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_envvars.@LTO@ -c $(srcdir)/rktio_envvars.c

rktio_fs_change.@LTO@: $(srcdir)/rktio_fs_change.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_fs_change.@LTO@ -c $(srcdir)/rktio_fs_change.c

rktio_flock.@LTO@: $(srcdir)/rktio_flock.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_flock.@LTO@ -c $(srcdir)/rktio_flock.c

rktio_shellex.@LTO@: $(srcdir)/rktio_shellex.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_shellex.@LTO@ -c $(srcdir)/rktio_shellex.c

rktio_time.@LTO@: $(srcdir)/rktio_time.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_time.@LTO@ -c $(srcdir)/rktio_time.c

rktio_cpu.@LTO@: $(srcdir)/rktio_cpu.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_cpu.@LTO@ -c $(srcdir)/rktio_cpu.c

rktio_syslog.@LTO@: $(srcdir)/rktio_syslog.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_syslog.@LTO@ -c $(srcdir)/rktio_syslog.c

rktio_convert.@LTO@: $(srcdir)/rktio_convert.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_convert.@LTO@ -c $(srcdir)/rktio_convert.c

rktio_sha1.@LTO@: $(srcdir)/rktio_sha1.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_sha1.@LTO@ -c $(srcdir)/rktio_sha1.c

rktio_sha2.@LTO@: $(srcdir)/rktio_sha2.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_sha2.@LTO@ -c $(srcdir)/rktio_sha2.c

rktio_dll.@LTO@: $(srcdir)/rktio_dll.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_dll.@LTO@ -c $(srcdir)/rktio_dll.c

rktio_error.@LTO@: $(srcdir)/rktio_error.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_error.@LTO@ -c $(srcdir)/rktio_error.c

rktio_hash.@LTO@: $(srcdir)/rktio_hash.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_hash.@LTO@ -c $(srcdir)/rktio_hash.c

rktio_wide.@LTO@: $(srcdir)/rktio_wide.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_wide.@LTO@ -c $(srcdir)/rktio_wide.c

rktio_console.@LTO@: $(srcdir)/rktio_console.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_console.@LTO@ -c $(srcdir)/rktio_console.c

rktio_main.@LTO@: $(srcdir)/rktio_main.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o rktio_main.@LTO@ -c $(srcdir)/rktio_main.c

demo.@LTO@: $(srcdir)/demo.c $(RKTIO_HEADERS)
	$(CC) $(CFLAGS) $(CPPFLAGS) -I$(srcdir) -I. -o demo.@LTO@ -c $(srcdir)/demo.c

clean:
	rm -f $(OBJS) librktio.@LTA@ rktio_demo demo_fifo

# ----------------------------------------

# To rebuild the S-expression form of "rktio.h"

rktio-rktl rktio-inc rktio-def:
	$(MAKE) $(srcdir)/rktio.rktl
	$(MAKE) $(srcdir)/rktio.inc
	$(MAKE) $(srcdir)/rktio.def

$(srcdir)/rktio.rktl: $(srcdir)/rktio.h $(srcdir)/parse.rkt
	$(RACKET) $(srcdir)/parse.rkt -o $(srcdir)/rktio.rktl $(srcdir)/rktio.h

$(srcdir)/rktio.inc: $(srcdir)/rktio.h $(srcdir)/parse.rkt
	$(RACKET) $(srcdir)/parse.rkt -c -o $(srcdir)/rktio.inc $(srcdir)/rktio.h

$(srcdir)/rktio.def: $(srcdir)/rktio.h $(srcdir)/parse.rkt
	$(RACKET) $(srcdir)/parse.rkt -d -o $(srcdir)/rktio.def $(srcdir)/rktio.h

# ----------------------------------------

@HIDE_NOT_STANDALONE@librktio:
	$(MAKE) librktio.@LIBSFX@

# Builds a shared object; requires `configure --enable-standalone`
@HIDE_STANDALONE@librktio.@LIBSFX@: $(OBJS)
	$(AR) @HIDE_STANDALONE@librktio.@LIBSFX@ $(OBJS) $(LDFLAGS) $(LIBS)

# Builds a shared object and installs it to `configure --prefix=...` target
install-shared-object:
	$(MAKE) librktio.@LIBSFX@
	mkdir -p "$(DESTDIR)$(libdir)/"
	$(ICP_LIB) librktio.@LIBSFX@ "$(DESTDIR)$(libdir)/librktio.@LIBSFX@"
